#include <iostream>

using namespace std;

typedef struct _QUEUE_NODE
{
	/* data */
	int* pData;
	int length;
	int head;
	int tail;
	int count;
}QUEUE_NODE;

#define STATUS int
#define TRUE 1
#define FALSE 0

QUEUE_NODE* alloca_queue(int number)
{
	QUEUE_NODE* pQueueNode;
	if(number == 0)
		return NULL;

	pQueueNode = (QUEUE_NODE*)malloc(sizeof(QUEUE_NODE));
	memset(pQueueNode, 0, sizeof(QUEUE_NODE));  
  
    pQueueNode->pData = (int*)malloc(sizeof(int) * number);  
    if(NULL == pQueueNode->pData){  
        free(pQueueNode);  
        return NULL;  
    }  
  
    pQueueNode->length = number;  
    return pQueueNode;  	
}

STATUS delete_queue(const QUEUE_NODE* pQueueNode)  
{  
    if(NULL == pQueueNode)   
        return FALSE;  
      
    assert(NULL != pQueueNode->pData);  
      
    free(pQueueNode->pData);  
    free((void*)pQueueNode);  
    return TRUE;  
}  

STATUS insert_queue(QUEUE_NODE* pQueueNode, int value)
{
	if(pQueueNode == NULL)
		return FALSE;
	if(pQueueNode->length == pQueueNode->count)
		return FALSE;
	pQueueNode->pData[pQueueNode->tail] = value;
	pQueueNode->tail = (pQueueNode->tail +1)%pQueueNode->length;  //循环队列
	pQueueNode->count++;
	return TRUE;
}

STATUS get_queue_data(QUEUE_NODE* pQueueNode, int* value)  
{  
    if(NULL == pQueueNode || NULL == value)  
        return FALSE;  
  
    if(0 == pQueueNode->count)  
        return FALSE;  
  
    *value = pQueueNode->pData[pQueueNode->head];  
    pQueueNode-> pData[pQueueNode->head] = 0;   
    pQueueNode-> count --;  
    pQueueNode->head = (pQueueNode->head + 1) % pQueueNode->length;  
    return TRUE;  
}  

int  get_total_number(const QUEUE_NODE* pQueueNode)  
{  
    if(NULL == pQueueNode)  
        return 0;  
  
    return pQueueNode->count;  
}  

int  get_total_number(const QUEUE_NODE* pQueueNode)  
{  
    if(NULL == pQueueNode)  
        return 0;  
  
    return pQueueNode->length;  
}  

int main()
{
    cout << "Hello world!" << endl;
    return 0;
}
